package com.example.myweb.Service.Auth;

import com.example.myweb.Domain.Entity.User;
import com.example.myweb.Dto.Auth.ForgotPasswordRequestDTO;
import com.example.myweb.Dto.Auth.LoginRequestDTO;
import com.example.myweb.Dto.Auth.RegisterRequestDTO;
import com.example.myweb.Dto.Auth.ResetPasswordRequestDTO;
import com.example.myweb.Dto.User.UserProfileUpdateRequestDTO;
import com.example.myweb.Vo.Auth.AuthResponseVO;

public interface AuthService {
    /**
     * 用户注册
     * @param request 注册请求DTO
     * @return 注册成功后的认证响应VO
     */
    AuthResponseVO register(RegisterRequestDTO request);

    /**
     * 用户登录并获取JWT
     * @param request 登录请求DTO
     * @return 登录成功后的认证响应VO
     */
    AuthResponseVO login(LoginRequestDTO request);

    /**
     * 更新用户资料
     * @param userId 用户ID
     * @param request 用户资料更新请求DTO
     * @return 更新后的用户
     */
    User updateProfile(Long userId, UserProfileUpdateRequestDTO request);

    /**
     * 忘记密码
     * @param request 忘记密码请求DTO
     */
    void forgotPassword(ForgotPasswordRequestDTO request); // 新增
    void resetPassword(ResetPasswordRequestDTO request); // 新增

    /**
     * 更新指定用户的密码
     * @param userId 用户的ID
     * @param oldPassword 用户提供的旧密码，用于验证
     * @param newPassword 用户想要设置的新密码
     */
    void updatePassword(Long userId, String oldPassword, String newPassword);
}